<?php
// +------------------------------------------------------------------
// | Cls-Token [ USER LOGIN AUTHENTICATION TOKEN ]
// | Copyright (c) 2024 All rights reserved.
// | Based on ThinkPHP 6 | 8
// | Licensed Mulan PSL v2 ( http://license.coscl.org.cn/MulanPSL2 )
// | Author: CLS <422064377>
// | CreateDate: 2024-07-12
// +------------------------------------------------------------------

/*
 * cls-token 配置文件
 * 如果是多应用,可在不同的 应用目录/config/cls-token.php 中覆盖配置
 *      举例: 使用了数据库方式保存,
 *             在 admin应用中 token表是 "admin_token"
 *             在 api应用中 token表是 "user_token"
 *             此时就可在两个应用下配置各自的表名(**前提是有对应的token表)
 *
 *          或者是使用了redis方式保存,
 *             在 admin应用中 可设置"admin_tk:"前缀
 *             在 api应用中 可设置"api_tk:"前缀
 *             避免用 id 标识时 id 可能重复的问题
 *
 *      **如果使用数据库存储token记录,需要创建自己的token表(参见README)
 *
 */
return [
    // 默认存储标识 (stores配置项中的键名)
    //      为 "rds" 时,使用下方 stores --> "rds" 相应配置存储
    //      为 "db" 时,使用下方 stores --> "db" 相应配置存储
    "default"         => "rds",

    // 存储配置信息
    "stores"          => [
        // 键名即为 存储标识,可自定义
        "rds" => [
            // 存储类型 "redis" / "database"
            "type"       => "redis",
            "host"       => env("cls_token.redis_host", "127.0.0.1"),
            "port"       => env("cls_token.redis_port", 6379),
            "password"   => env("cls_token.redis_password", ""),
            "select"     => env("cls_token.redis_select", 1),
            "timeout"    => env("cls_token.redis_timeout", 0),
            "persistent" => env("cls_token.persistent", false),
            // 不同应用可设置不同前缀,避免id重复
            "prefix"     => env("cls_token.redis_prefix", "app_name:"),
        ],
        "db"     => [
            // 存储类型 "redis" / "database"
            "type"        => "database",
            // 数据库连接标识(TP database配置文件中 connections 配置项中的键名)
            //      默认"" 使用默认数据库连接
            "connection"  => "",
            // 保存token数据的表名(不含前缀)
            "token_table" => "admin_token",
        ],
    ],

    // 令牌存储时加密算法 (默认"" 不加密)
    //     可用加密算法为 hash_hmac()方法可用的算法,可用hash_hmac_algos()获取算法列表
    //     常用的有 "sha256" / "md5" / "ripemd160" / "haval160,4"
    "save_algo"       => "",
    // 令牌存储时的加密密钥(盐),如改变所有已存储token将失效
    "save_secret_key" => 'cls_token_sec_us77@sudf91!hjVbd9$u7',

    // 令牌-过期时间(秒)
    "expire"          => 60,

    // 刷新令牌-是否启用  true:启用(默认) / false:不使用刷新令牌
    "refresh_token"   => true,
    // 刷新令牌-过期时间(秒) 启用刷新令牌时才有用,过期时间应远大于token的过期时间
    "refresh_expire"  => 3600,

    // 鉴权模式(token及refresh_token都受此影响)
    //      可取值:  1 / 2 / 3
    //         1:检查 token / refresh_token 的值以及是否过期
    //         2:在1的基础上,同时检查 来访user_agent与登录时创建的记录是否一致
    //         3:在2的基础上,同时检查 来访ip与创建记录的是否一致(慎用,移动应用ip可能会随时变))
    "check_mode"      => 2,

];
